package sim.utils.GenVarAle;

/**
 * Genera valores que responden a una <b>Variable Normal</b> con los valores de
 * <i>media</i> y <i>desviacion standard</i> pasados por parámetros.
 * 
 * @author alejandro
 * 
 */
public class VGNormal extends VariableGenerator {

	private double media;
	private double desviacion;

	/**
	 * Constructor con parámetros. Se debe pasar la media y desviación de la
	 * variable.
	 * 
	 * @param media
	 *            La Media (μ) de la distribución normal.
	 * @param desviacion
	 *            la Desviación Standard (σ) de la distribución normal.
	 */
	public VGNormal(double media, double desviacion) {
		super();
		this.media = media;
		this.desviacion = desviacion;
	}

	@Override
	protected double generarValor() {
		double r1 = super.randomGenerator.next();
		double r2 = super.randomGenerator.next();
		super.lastRandoms[0]=r1;
		super.lastRandoms[1]=r2;
		double zeta, valor;
		zeta = Math.sqrt((-2) * Math.log(r1)) * Math.cos(2 * Math.PI * r2);
		// zeta = Math.sqrt((-2) * Math.log(r1)) * Math.sin(2 * Math.PI * r2);
		valor = this.media + zeta * this.desviacion;

		return valor;
	}

}
